
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.brain.cont.view.mbean;

import com.brain.cont.dto.AsientoOperacionDetaDto;
import com.brain.cont.dto.AsientoOperacionDto;
import com.brain.cont.dto.OperacionDto;
import com.brain.cont.manager.AsientoOperacionDetaManager;
import com.brain.cont.manager.AsientoOperacionManager;
import com.brain.cont.manager.OperacionManager;
import com.brain.cont.view.util.ConstantesCont;
import com.brain.core.dto.UbigeoDto;
import com.brain.core.exception.DAOException;
import com.brain.core.manager.BitacoraManager;
import com.brain.core.view.mbean.*;
import com.brain.core.manager.RecursosManager;
import com.brain.core.manager.UbigeoManager;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.Resource;
import javax.faces.model.SelectItem;
import org.apache.log4j.Logger;
import org.primefaces.context.RequestContext;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;

/**
 *
 * @author J. Verde
 */
@Controller("operacionMBean")
@Scope("session")
public class OperacionMBean extends GenericMBean implements Serializable {

    private static Logger logger = Logger.getLogger(OperacionMBean.class);
    @Resource
    private RecursosManager recursosManager;
    @Resource
    private OperacionManager manager;
    @Resource
    private BitacoraManager managerBitacora;
    @Resource
    private AsientoOperacionManager managerAsientoOperacion;
    @Resource
    private AsientoOperacionDetaManager managerAsientoOperacionDeta;
    @Resource
    private UbigeoManager managerUbigeo;
    private List<OperacionDto> lista;
    private OperacionDto dto;
    private AsientoOperacionDto asientoOperacionDto;
    private AsientoOperacionDetaDto asientoOperacionDetaDto;
    private OperacionDto dtoFiltro;
    private String keyTitulo = "key.operacion.titulo";
    private String keyTituloAsientoOp = "key.asiento.operacion.titulo";
    private String keyTituloAsientoOpDeta = "key.asiento.operacion.deta.titulo";
    private List<UbigeoDto> siPaises, siPaisesBusqueda;
    private SelectItem[] siTipos;
    @Autowired
    private ApplicationMBean applicationMBean;
    @Autowired
    private SessionMBean sessionMBean;

    public OperacionMBean() {
        this.dtoFiltro = null;
        this.dto = null;
        this.asientoOperacionDto = null;
        this.asientoOperacionDetaDto = null;
    }

    public String iniciar() {
        this.dtoFiltro = new OperacionDto();
        this.dtoFiltro.setDescripcion("");
        return manager.getUrlLista();
    }

    public String nuevo() {
        sessionMBean.setAccion(ConstantesCont.Formulario.NUEVO);
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean.getAccion()));
        this.dto = new OperacionDto();
        this.dto.setPaisDto(new UbigeoDto());
        this.dto.setListaDetalles(new ArrayList<AsientoOperacionDto>());
        return manager.getUrlPrincipal();
    }

    public void nuevoAsientoOperacion() {
        sessionMBean.setAccion(ConstantesCont.Formulario.NUEVO);
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTituloAsientoOp, sessionMBean.getAccion()));
        this.asientoOperacionDto = new AsientoOperacionDto();
        this.asientoOperacionDto.setOperacionDto(dto);
        this.asientoOperacionDto.setListaDetalles(new ArrayList<AsientoOperacionDetaDto>());
    }

    public void nuevoAsientoOperacionDeta() {
        sessionMBean.setAccion(ConstantesCont.Formulario.NUEVO);
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTituloAsientoOpDeta, sessionMBean.getAccion()));
        this.asientoOperacionDetaDto = new AsientoOperacionDetaDto();
        this.asientoOperacionDetaDto.setAsientoOperacionDto(asientoOperacionDto); 
    }

    public String editar() {
        sessionMBean.setAccion(ConstantesCont.Formulario.EDITAR);
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean.getAccion()));
        return manager.getUrlPrincipal();
    }

    public void editarAsientoOperacion() {
        sessionMBean.setAccion(ConstantesCont.Formulario.EDITAR);
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTituloAsientoOp, sessionMBean.getAccion()));
    }

    public void verAsientoOperacion() {
        sessionMBean.setAccion(ConstantesCont.Formulario.VER);
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTituloAsientoOp, sessionMBean.getAccion()));
    }

    public void verAsientoOperacionDeta() {
        sessionMBean.setAccion(ConstantesCont.Formulario.VER);
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTituloAsientoOpDeta, sessionMBean.getAccion()));
    }

    public void editarAsientoOperacionDeta() {
        sessionMBean.setAccion(ConstantesCont.Formulario.EDITAR);
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTituloAsientoOpDeta, sessionMBean.getAccion()));
    }

    public String ver() {
        sessionMBean.setAccion(ConstantesCont.Formulario.VER);
        sessionMBean.setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean.getAccion()));
        return manager.getUrlPrincipal();
    }

    public void guardar() {
        try {
            if (manager.guardar(dto) != null) {
                this.dto = this.manager.obtenerPorId(this.dto.getId());
                sessionMBean.setAccion(ConstantesCont.Formulario.EDITAR);
            }
        } catch (DAOException ex) {
            recursosManager.showError(ex.getMessage());
        }
    }

    public boolean guardarOperacionAsiento() {
        try {
            if (managerAsientoOperacion.guardar(asientoOperacionDto) != null) {
                this.dto = this.manager.obtenerPorId(this.dto.getId());
                sessionMBean.setAccion(ConstantesCont.Formulario.EDITAR);
            }
        } catch (Exception ex) {
            showError(ex.getMessage());
        }
        return false;
    }

    public void guardarOperacionAsientoDeta() {
        try {
            if (managerAsientoOperacionDeta.guardar(asientoOperacionDetaDto) != null) {
                this.asientoOperacionDto = this.managerAsientoOperacion.obtenerPorId(this.asientoOperacionDto.getId());
                sessionMBean.setAccion(ConstantesCont.Formulario.EDITAR);
            }
        } catch (Exception ex) {
            showError(ex.getMessage());
        }
    }

    public String verBitacora() {
        managerBitacora.cargarBitacoraEntidad(manager.getIdEntidad(), this.dto.getId());
        return null;
    }
    
    public void buscar() {
        try {
            lista = manager.buscar(dtoFiltro);
        } catch (DAOException ex) {
            logger.error(ex);
        }
    }

    public String retroceder() {
        sessionMBean.setAccion(ConstantesCont.Formulario.LISTA);
        sessionMBean().setTitulo(recursosManager.construirTitulo(keyTitulo, sessionMBean().getAccion()));
        return manager.getUrlLista();
    }

    public static Logger getLogger() {
        return logger;
    }

    public static void setLogger(Logger logger) {
        OperacionMBean.logger = logger;
    }

    public RecursosManager getRecursosManager() {
        return recursosManager;
    }

    public void setRecursosManager(RecursosManager recursosManager) {
        this.recursosManager = recursosManager;
    }

    public OperacionManager getManager() {
        return manager;
    }

    public void setManager(OperacionManager manager) {
        this.manager = manager;
    }

    public List<OperacionDto> getLista() {
        return lista;
    }

    public void setLista(List<OperacionDto> lista) {
        this.lista = lista;
    }

    public OperacionDto getDto() {
        return dto;
    }

    public void setDto(OperacionDto dto) {
        this.dto = dto;
    }

    public OperacionDto getDtoFiltro() {
        return dtoFiltro;
    }

    public void setDtoFiltro(OperacionDto dtoFiltro) {
        this.dtoFiltro = dtoFiltro;
    }

    public String getKeyTitulo() {
        return keyTitulo;
    }

    public void setKeyTitulo(String keyTitulo) {
        this.keyTitulo = keyTitulo;
    }

    public ApplicationMBean getApplicationMBean() {
        return applicationMBean;
    }

    public void setApplicationMBean(ApplicationMBean applicationMBean) {
        this.applicationMBean = applicationMBean;
    }

    public SessionMBean getSessionMBean() {
        return sessionMBean;
    }

    public void setSessionMBean(SessionMBean sessionMBean) {
        this.sessionMBean = sessionMBean;
    }

    public List<UbigeoDto> getSiPaises() throws DAOException {
        siPaises = managerUbigeo.obtenerPaisesActivosPorEmpresa();
        return siPaises;
    }

    public void setSiPaises(List<UbigeoDto> siPaises) {
        this.siPaises = siPaises;
    }

    public List<UbigeoDto> getSiPaisesBusqueda() throws DAOException {
        siPaisesBusqueda = managerUbigeo.obtenerPaisesActivosPorEmpresa();
        return siPaisesBusqueda;
    }

    public void setSiPaisesBusqueda(List<UbigeoDto> siPaisesBusqueda) {
        this.siPaisesBusqueda = siPaisesBusqueda;
    }

    public UbigeoManager getManagerUbigeo() {
        return managerUbigeo;
    }

    public void setManagerUbigeo(UbigeoManager managerUbigeo) {
        this.managerUbigeo = managerUbigeo;
    }

    public AsientoOperacionDto getAsientoOperacionDto() {
        return asientoOperacionDto;
    }

    public void setAsientoOperacionDto(AsientoOperacionDto asientoOperacionDto) {
        this.asientoOperacionDto = asientoOperacionDto;
    }

    public AsientoOperacionDetaDto getAsientoOperacionDetaDto() {
        return asientoOperacionDetaDto;
    }

    public void setAsientoOperacionDetaDto(AsientoOperacionDetaDto asientoOperacionDetaDto) {
        this.asientoOperacionDetaDto = asientoOperacionDetaDto;
    }

    public AsientoOperacionManager getManagerAsientoOperacion() {
        return managerAsientoOperacion;
    }

    public void setManagerAsientoOperacion(AsientoOperacionManager managerAsientoOperacion) {
        this.managerAsientoOperacion = managerAsientoOperacion;
    }

    public AsientoOperacionDetaManager getManagerAsientoOperacionDeta() {
        return managerAsientoOperacionDeta;
    }

    public void setManagerAsientoOperacionDeta(AsientoOperacionDetaManager managerAsientoOperacionDeta) {
        this.managerAsientoOperacionDeta = managerAsientoOperacionDeta;
    }

    public String getKeyTituloAsientoOp() {
        return keyTituloAsientoOp;
    }

    public void setKeyTituloAsientoOp(String keyTituloAsientoOp) {
        this.keyTituloAsientoOp = keyTituloAsientoOp;
    }

    public String getKeyTituloAsientoOpDeta() {
        return keyTituloAsientoOpDeta;
    }

    public void setKeyTituloAsientoOpDeta(String keyTituloAsientoOpDeta) {
        this.keyTituloAsientoOpDeta = keyTituloAsientoOpDeta;
    }

    public SelectItem[] getSiTipos() {
        return managerAsientoOperacionDeta.siTipos();
    }

    public void setSiTipos(SelectItem[] siTipos) {
        this.siTipos = siTipos;
    }
}
